package com.nkzy.Controller;

import cn.hutool.core.bean.BeanUtil;
import com.nkzy.Service.UserService;
import com.nkzy.domain.dto.UserFromDTO;
import com.nkzy.domain.pojo.Result;
import com.nkzy.domain.pojo.User;
import com.nkzy.domain.vo.UserVO;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

import static net.sf.jsqlparser.util.validation.metadata.NamedObject.user;

@RequestMapping("/users")//Restful风格要求请示路径用表名+s
@RestController
public class UserController {
    //Controller是前后端进行数据交互的桥梁，对于后端开发人员开说:给前端开发人员提供接口说明文档
@Autowired
//依赖注入
    private UserService userService;
//保存数据
    @PostMapping
    @Operation(summary = "保存用户信息")
    public Result saveUser(@RequestBody UserFromDTO userFromDTO){
        //1.把DTO转换为POJO对象
        User user =BeanUtil.copyProperties(userFromDTO, User.class);
        //2.调用Service层保存的方法，完成增加用户信息
        userService.save(user);
        return Result.success();
    }


//  查询一个用户根据ID查询：查询用GET,POST,PUT,DELETE
    @GetMapping("/{id}")//RESTful格式的传参风格要求请求路径用表名+ID
    @Operation(summary = "根据ID查询用户信息")
    public Result getUser(@PathVariable Long id){
        //1.调用Service层查询的方法
        User user = userService.getById(id);
//        2.把POJO对象转换为VO对象
            UserVO userVO = BeanUtil.copyProperties(user, UserVO.class);
        //2.返回查询结果
        return Result.success(userVO);


    }

//删除一个用户
    @DeleteMapping("/{id}")
    @Operation(summary = "根据ID删除用户信息")
    public Result deleteUser(@PathVariable Long id){
        //1.调用Service层删除的方法
        userService.removeById(id);
        return Result.success();
    }
//    根据id的集合查询多个用户
    @GetMapping
    @Operation(summary = "根据ID集合查询用户信息")
    public Result getUsers(@RequestParam("ids") List<Long> ids){
        //1.调用Service层查询的方法 调用多个用户 vo展示dto修改
        List<User> users = userService.listByIds(ids);
        //2.把POJO对象转换为VO对象

    List<UserVO>  UserVO=BeanUtil.copyToList(users, UserVO.class);
    return Result.success(UserVO);



    }
//    查询所有用户
    @GetMapping("/all")
    @Operation(summary = "查询所有用户信息")
    public Result getAllUsers(){
        //1.调用Service层查询的方法
        List<User> users = userService.list();
        //2.把POJO对象转换为VO对象
      List<UserVO>  UserVO=  BeanUtil.copyToList(users, UserVO.class);
      return Result.success(UserVO);

    }
//    修改一个用户
    @PutMapping
    @Operation(summary = "修改用户信息")
    public Result updateUser(@RequestBody UserFromDTO userFromDTO){
        //1.把DTO转换为POJO对象
        User user =BeanUtil.copyProperties(userFromDTO, User.class);
        //2.调用Service层修改的方法
        userService.updateById(user);
        return Result.success();
    }
}
